home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / AEDataModel.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  25KB  |  601 lines

  1. /*
  2.      File:        AEDataModel.h
  3.  
  4.      Contains:    AppleEvent Data Model Interfaces.
  5.  
  6.      Version:    Technology:    Copland
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __AEDATAMODEL__
  19. #define __AEDATAMODEL__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __MEMORY__
  25. #include <Memory.h>
  26. #endif
  27. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  28. #if !FOR_PTR_BASED_AE
  29. #ifndef __MIXEDMODE__
  30. #include <MixedMode.h>
  31. #endif
  32. #endif
  33. #endif
  34. #if FOR_SYSTEM8_PREEMPTIVE
  35. #ifndef __MEMALLOCATORS__
  36. #include <MemAllocators.h>
  37. #endif
  38. #endif
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. #if PRAGMA_IMPORT_SUPPORTED
  45. #pragma import on
  46. #endif
  47.  
  48. #if PRAGMA_ALIGN_SUPPORTED
  49. #pragma options align=mac68k
  50. #endif
  51.  
  52.  
  53. enum {
  54.                                                                 /* Apple event descriptor types */
  55.     typeBoolean                    = 'bool',
  56.     typeChar                    = 'TEXT',                        /* Preferred numeric Apple event descriptor types */
  57.     typeSInt16                    = 'shor',
  58.     typeSInt32                    = 'long',
  59.     typeUInt32                    = 'magn',
  60.     typeSInt64                    = 'comp',
  61.     typeIEEE32BitFloatingPoint    = 'sing',
  62.     typeIEEE64BitFloatingPoint    = 'doub',
  63.     type128BitFloatingPoint        = 'ldbl',
  64.     typeDecimalStruct            = 'decm',                        /* Non-preferred Apple event descriptor types */
  65.     typeSMInt                    = typeSInt16,
  66.     typeShortInteger            = typeSInt16,
  67.     typeInteger                    = typeSInt32,
  68.     typeLongInteger                = typeSInt32,
  69.     typeMagnitude                = typeUInt32,
  70.     typeComp                    = typeSInt64,
  71.     typeSMFloat                    = typeIEEE32BitFloatingPoint,
  72.     typeShortFloat                = typeIEEE32BitFloatingPoint,
  73.     typeFloat                    = typeIEEE64BitFloatingPoint,
  74.     typeLongFloat                = typeIEEE64BitFloatingPoint,
  75.     typeExtended                = 'exte',                        /* More Apple event descriptor types */
  76.     typeAEList                    = 'list',
  77.     typeAERecord                = 'reco',
  78.     typeAppleEvent                = 'aevt',
  79.     typeEventRecord                = 'evrc',
  80.     typeTrue                    = 'true',
  81.     typeFalse                    = 'fals',
  82.     typeAlias                    = 'alis',
  83.     typeEnumerated                = 'enum',
  84.     typeType                    = 'type',
  85.     typeAppParameters            = 'appa',
  86.     typeProperty                = 'prop',
  87.     typeFSS                        = 'fss ',
  88.     typeKeyword                    = 'keyw',
  89.     typeSectionH                = 'sect',
  90.     typeWildCard                = '****',
  91.     typeApplSignature            = 'sign',
  92.     typeQDRectangle                = 'qdrt',
  93.     typeFixed                    = 'fixd',
  94.     typeSessionID                = 'ssid',
  95.     typeTargetID                = 'targ',
  96.     typeProcessSerialNumber        = 'psn ',
  97.     typeKernelProcessID            = 'kpid',
  98.     typeDispatcherID            = 'dspt',
  99.     typeNull                    = 'null'                        /* null or nonexistent data */
  100. };
  101.  
  102. /* Keywords for Apple event attributes */
  103.  
  104. enum {
  105.     keyTransactionIDAttr        = 'tran',
  106.     keyReturnIDAttr                = 'rtid',
  107.     keyEventClassAttr            = 'evcl',
  108.     keyEventIDAttr                = 'evid',
  109.     keyAddressAttr                = 'addr',
  110.     keyOptionalKeywordAttr        = 'optk',
  111.     keyTimeoutAttr                = 'timo',
  112.     keyInteractLevelAttr        = 'inte',                        /* this attribute is read only - will be set in AESend */
  113.     keyEventSourceAttr            = 'esrc',                        /* this attribute is read only */
  114.     keyMissedKeywordAttr        = 'miss',                        /* this attribute is read only */
  115.     keyOriginalAddressAttr        = 'from'                        /* new in 1.0.1 */
  116. };
  117.  
  118. /*    Constants used for specifying the factoring of AEDescLists. */
  119.  
  120. enum {
  121.     kAEDescListFactorNone        = 0,
  122.     kAEDescListFactorType        = 4,
  123.     kAEDescListFactorTypeAndSize = 8
  124. };
  125.  
  126. /* Constants used creating an AppleEvent */
  127.  
  128. enum {
  129.                                                                 /* Constant for the returnID param of AECreateAppleEvent */
  130.     kAutoGenerateReturnID        = -1,                            /* AECreateAppleEvent will generate a session-unique ID */
  131.                                                                 /* Constant for transaction ID's */
  132.     kAnyTransactionID            = 0                                /* no transaction is in use */
  133. };
  134.  
  135. /* Apple event manager data types */
  136. typedef ResType DescType;
  137. typedef FourCharCode AEKeyword;
  138. #if FOR_PTR_BASED_AE
  139. typedef struct OpaqueAEDescData* AEDescData;
  140. struct AEDesc {
  141.     DescType                         descriptorType;
  142.     AEDescData                         descriptorData;
  143. };
  144. typedef struct AEDesc AEDesc;
  145.  
  146. /*typedef AEDesc *            AEDescPtr;*/
  147. #else
  148. struct AEDesc {
  149.     DescType                         descriptorType;
  150.     Handle                             dataHandle;
  151. };
  152. typedef struct AEDesc AEDesc;
  153.  
  154. typedef AEDesc *AEDescPtr;
  155. #endif
  156. struct AEKeyDesc {
  157.     AEKeyword                         descKey;
  158.     AEDesc                             descContent;
  159. };
  160. typedef struct AEKeyDesc AEKeyDesc;
  161.  
  162. /* a list of AEDesc's is a special kind of AEDesc */
  163. typedef AEDesc AEDescList;
  164. /* AERecord is a list of keyworded AEDesc's */
  165. typedef AEDescList AERecord;
  166. /* an AEDesc which contains address data */
  167. typedef AEDesc AEAddressDesc;
  168. /* an AERecord that contains an AppleEvent, and related data types */
  169. typedef AERecord AppleEvent;
  170. typedef AppleEvent *AppleEventPtr;
  171. typedef SInt16 AEReturnID;
  172. typedef SInt32 AETransactionID;
  173. typedef FourCharCode AEEventClass;
  174. typedef FourCharCode AEEventID;
  175. typedef SInt8 AEArrayType;
  176.  
  177. enum {
  178.     kAEDataArray                = 0,
  179.     kAEPackedArray                = 1,
  180.     kAEDescArray                = 3,
  181.     kAEKeyDescArray                = 4
  182. };
  183.  
  184. #if FOR_PTR_BASED_AE
  185. union AEArrayData {
  186.     short                             kAEDataArray[1];
  187.     char                             kAEPackedArray[1];
  188.     AEDesc                             kAEDescArray[1];
  189.     AEKeyDesc                         kAEKeyDescArray[1];
  190. };
  191. typedef union AEArrayData AEArrayData;
  192.  
  193. #else
  194.  
  195. enum {
  196.     kAEHandleArray                = 2
  197. };
  198.  
  199. union AEArrayData {
  200.     short                             kAEDataArray[1];
  201.     char                             kAEPackedArray[1];
  202.     Handle                             kAEHandleArray[1];
  203.     AEDesc                             kAEDescArray[1];
  204.     AEKeyDesc                         kAEKeyDescArray[1];
  205. };
  206. typedef union AEArrayData AEArrayData;
  207.  
  208. #endif
  209. typedef AEArrayData *AEArrayDataPointer;
  210. /*
  211. *************************************************************************
  212.   These calls are used to set up and modify the coercion dispatch table.
  213. *************************************************************************
  214. */
  215. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  216. #if !FOR_PTR_BASED_AE
  217. typedef pascal OSErr (*AECoerceDescProcPtr)(const AEDesc *fromDesc, DescType toType, long handlerRefcon, AEDesc *toDesc);
  218. typedef pascal OSErr (*AECoercePtrProcPtr)(DescType typeCode, const void *dataPtr, Size dataSize, DescType toType, long handlerRefcon, AEDesc *result);
  219.  
  220. #if GENERATINGCFM
  221. typedef UniversalProcPtr AECoerceDescUPP;
  222. typedef UniversalProcPtr AECoercePtrUPP;
  223. #else
  224. typedef AECoerceDescProcPtr AECoerceDescUPP;
  225. typedef AECoercePtrProcPtr AECoercePtrUPP;
  226. #endif
  227.  
  228. enum {
  229.     uppAECoerceDescProcInfo = kPascalStackBased
  230.          | RESULT_SIZE(SIZE_CODE(sizeof(OSErr)))
  231.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(const AEDesc *)))
  232.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(DescType)))
  233.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
  234.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(AEDesc *))),
  235.     uppAECoercePtrProcInfo = kPascalStackBased
  236.          | RESULT_SIZE(SIZE_CODE(sizeof(OSErr)))
  237.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DescType)))
  238.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(const void *)))
  239.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Size)))
  240.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(DescType)))
  241.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
  242.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(AEDesc *)))
  243. };
  244.  
  245. #if GENERATINGCFM
  246. #define NewAECoerceDescProc(userRoutine)        \
  247.         (AECoerceDescUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppAECoerceDescProcInfo, GetCurrentArchitecture())
  248. #define NewAECoercePtrProc(userRoutine)        \
  249.         (AECoercePtrUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppAECoercePtrProcInfo, GetCurrentArchitecture())
  250. #else
  251. #define NewAECoerceDescProc(userRoutine)        \
  252.         ((AECoerceDescUPP) (userRoutine))
  253. #define NewAECoercePtrProc(userRoutine)        \
  254.         ((AECoercePtrUPP) (userRoutine))
  255. #endif
  256.  
  257. #if GENERATINGCFM
  258. #define CallAECoerceDescProc(userRoutine, fromDesc, toType, handlerRefcon, toDesc)        \
  259.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppAECoerceDescProcInfo, (fromDesc), (toType), (handlerRefcon), (toDesc))
  260. #define CallAECoercePtrProc(userRoutine, typeCode, dataPtr, dataSize, toType, handlerRefcon, result)        \
  261.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppAECoercePtrProcInfo, (typeCode), (dataPtr), (dataSize), (toType), (handlerRefcon), (result))
  262. #else
  263. #define CallAECoerceDescProc(userRoutine, fromDesc, toType, handlerRefcon, toDesc)        \
  264.         (*(userRoutine))((fromDesc), (toType), (handlerRefcon), (toDesc))
  265. #define CallAECoercePtrProc(userRoutine, typeCode, dataPtr, dataSize, toType, handlerRefcon, result)        \
  266.         (*(userRoutine))((typeCode), (dataPtr), (dataSize), (toType), (handlerRefcon), (result))
  267. #endif
  268. typedef UniversalProcPtr AECoercionHandlerUPP;
  269. extern pascal OSErr AEInstallCoercionHandler(DescType fromType, DescType toType, AECoercionHandlerUPP handler, long handlerRefcon, Boolean fromTypeIsDesc, Boolean isSysHandler)
  270.  THREEWORDINLINE(0x303C, 0x0A22, 0xA816);
  271.  
  272. extern pascal OSErr AERemoveCoercionHandler(DescType fromType, DescType toType, AECoercionHandlerUPP handler, Boolean isSysHandler)
  273.  THREEWORDINLINE(0x303C, 0x0723, 0xA816);
  274.  
  275. extern pascal OSErr AEGetCoercionHandler(DescType fromType, DescType toType, AECoercionHandlerUPP *handler, long *handlerRefcon, Boolean *fromTypeIsDesc, Boolean isSysHandler)
  276.  THREEWORDINLINE(0x303C, 0x0B24, 0xA816);
  277.  
  278. #endif
  279. #endif
  280. #if FOR_SYSTEM8_PREEMPTIVE
  281. #if FOR_PTR_BASED_AE
  282. typedef OSStatus (*AECoercionProc)(DescType typeCode, const void *dataPtr, ByteCount dataSize, DescType toType, void *handlerRefcon, AEDesc *result);
  283. extern OSStatus AEInstallCoercion(DescType fromType, DescType toType, AECoercionProc handler, void *handlerRefcon);
  284.  
  285. extern OSStatus AERemoveCoercion(DescType fromType, DescType toType, AECoercionProc handler);
  286.  
  287. extern OSStatus AEGetCoercion(DescType fromType, DescType toType, AECoercionProc *handler, void **handlerRefcon);
  288.  
  289. #endif
  290. #endif
  291. /*
  292. *************************************************************************
  293.   The following calls provide for a coercion interface.
  294. *************************************************************************
  295. */
  296. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  297. extern pascal OSErr AECoercePtr(DescType typeCode, const void *dataPtr, Size dataSize, DescType toType, AEDesc *result)
  298.  THREEWORDINLINE(0x303C, 0x0A02, 0xA816);
  299.  
  300. extern pascal OSErr AECoerceDesc(const AEDesc *theAEDesc, DescType toType, AEDesc *result)
  301.  THREEWORDINLINE(0x303C, 0x0603, 0xA816);
  302.  
  303. #endif
  304. /*
  305. *************************************************************************
  306.  The following calls apply to any AEDesc. Every 'result' descriptor is
  307.  created for you, so you will be responsible for memory management
  308.  (including disposing) of the descriptors so created.  
  309. *************************************************************************
  310. */
  311. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  312. extern pascal OSErr AECreateDesc(DescType typeCode, const void *dataPtr, Size dataSize, AEDesc *result)
  313.  THREEWORDINLINE(0x303C, 0x0825, 0xA816);
  314.  
  315. extern pascal OSErr AEDisposeDesc(AEDesc *theAEDesc)
  316.  THREEWORDINLINE(0x303C, 0x0204, 0xA816);
  317.  
  318. extern pascal OSErr AEDuplicateDesc(const AEDesc *theAEDesc, AEDesc *result)
  319.  THREEWORDINLINE(0x303C, 0x0405, 0xA816);
  320.  
  321. #endif
  322. #if FOR_SYSTEM8_PREEMPTIVE
  323. #if FOR_PTR_BASED_AE
  324. extern OSStatus AEClearDesc(AEDesc *descToClear);
  325.  
  326. extern Boolean AEDescIsNull(const AEDesc *desc);
  327.  
  328. extern OSStatus AESizeOfDescData(const AEDesc *desc, DescType *descriptorType, ByteCount *dataSize);
  329.  
  330. extern OSStatus AEGetDescData(const AEDesc *desc, DescType *typeCode, void *dataBuffer, ByteCount maximumSize, ByteCount *actualSize);
  331.  
  332. #endif
  333. #endif
  334. /*
  335. *************************************************************************
  336.   The following calls apply to AEDescList. Since AEDescList is a subtype of
  337.   AEDesc, the calls in the previous section can also be used for AEDescList.
  338.   All list and array indices are 1-based. If the data was greater than
  339.   maximumSize in the routines below, then actualSize will be greater than
  340.   maximumSize, but only maximumSize bytes will actually be retrieved.
  341. *************************************************************************
  342. */
  343. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  344. extern pascal OSErr AECreateList(const void *factoringPtr, Size factoredSize, Boolean isRecord, AEDescList *resultList)
  345.  THREEWORDINLINE(0x303C, 0x0706, 0xA816);
  346.  
  347. extern pascal OSErr AECountItems(const AEDescList *theAEDescList, long *theCount)
  348.  THREEWORDINLINE(0x303C, 0x0407, 0xA816);
  349.  
  350. extern pascal OSErr AEPutPtr(AEDescList *theAEDescList, long index, DescType typeCode, const void *dataPtr, Size dataSize)
  351.  THREEWORDINLINE(0x303C, 0x0A08, 0xA816);
  352.  
  353. extern pascal OSErr AEPutDesc(AEDescList *theAEDescList, long index, const AEDesc *theAEDesc)
  354.  THREEWORDINLINE(0x303C, 0x0609, 0xA816);
  355.  
  356. extern pascal OSErr AEGetNthPtr(const AEDescList *theAEDescList, long index, DescType desiredType, AEKeyword *theAEKeyword, DescType *typeCode, void *dataPtr, Size maximumSize, Size *actualSize)
  357.  THREEWORDINLINE(0x303C, 0x100A, 0xA816);
  358.  
  359. extern pascal OSErr AEGetNthDesc(const AEDescList *theAEDescList, long index, DescType desiredType, AEKeyword *theAEKeyword, AEDesc *result)
  360.  THREEWORDINLINE(0x303C, 0x0A0B, 0xA816);
  361.  
  362. extern pascal OSErr AESizeOfNthItem(const AEDescList *theAEDescList, long index, DescType *typeCode, Size *dataSize)
  363.  THREEWORDINLINE(0x303C, 0x082A, 0xA816);
  364.  
  365. extern pascal OSErr AEGetArray(const AEDescList *theAEDescList, AEArrayType arrayType, AEArrayDataPointer arrayPtr, Size maximumSize, DescType *itemType, Size *itemSize, long *itemCount)
  366.  THREEWORDINLINE(0x303C, 0x0D0C, 0xA816);
  367.  
  368. extern pascal OSErr AEPutArray(AEDescList *theAEDescList, AEArrayType arrayType, const AEArrayData *arrayPtr, DescType itemType, Size itemSize, long itemCount)
  369.  THREEWORDINLINE(0x303C, 0x0B0D, 0xA816);
  370.  
  371. extern pascal OSErr AEDeleteItem(AEDescList *theAEDescList, long index)
  372.  THREEWORDINLINE(0x303C, 0x040E, 0xA816);
  373.  
  374. #endif
  375. /*
  376. *************************************************************************
  377.  The following calls apply to AERecord. Since AERecord is a subtype of
  378.  AEDescList, the calls in the previous sections can also be used for
  379.  AERecord an AERecord can be created by using AECreateList with isRecord
  380.  set to true. 
  381. *************************************************************************
  382. */
  383. #if FOR_SYSTEM8_PREEMPTIVE
  384. extern pascal OSErr AEPutKeyPtr(AERecord *theAERecord, AEKeyword theAEKeyword, DescType typeCode, const void *dataPtr, Size dataSize)
  385.  THREEWORDINLINE(0x303C, 0x0A0F, 0xA816);
  386.  
  387. extern pascal OSErr AEPutKeyDesc(AERecord *theAERecord, AEKeyword theAEKeyword, const AEDesc *theAEDesc)
  388.  THREEWORDINLINE(0x303C, 0x0610, 0xA816);
  389.  
  390. extern pascal OSErr AEGetKeyPtr(const AERecord *theAERecord, AEKeyword theAEKeyword, DescType desiredType, DescType *typeCode, void *dataPtr, Size maximumSize, Size *actualSize)
  391.  THREEWORDINLINE(0x303C, 0x0E11, 0xA816);
  392.  
  393. extern pascal OSErr AEGetKeyDesc(const AERecord *theAERecord, AEKeyword theAEKeyword, DescType desiredType, AEDesc *result)
  394.  THREEWORDINLINE(0x303C, 0x0812, 0xA816);
  395.  
  396. extern pascal OSErr AESizeOfKeyDesc(const AERecord *theAERecord, AEKeyword theAEKeyword, DescType *typeCode, Size *dataSize)
  397.  THREEWORDINLINE(0x303C, 0x0829, 0xA816);
  398.  
  399. extern pascal OSErr AEDeleteKeyDesc(AERecord *theAERecord, AEKeyword theAEKeyword)
  400.  THREEWORDINLINE(0x303C, 0x0413, 0xA816);
  401.  
  402. #endif
  403. #if FOR_SYSTEM7_ONLY
  404. /*
  405.   Note: The following #defines map ``key'' calls on AERecords into ``param'' calls on 
  406.   AppleEvents.  Although no errors are currently returned if AERecords are 
  407.   passed to ``param'' calls and AppleEvents to ``key'' calls, the behavior of 
  408.   this type of API-mixing is not explicitly documented in Inside Macintosh.  
  409.   It just happens that the ``key'' calls have the same functionality as their 
  410.   ``param'' counterparts.  Since none of the ``key'' calls are currently available 
  411.   in the PowerPC IntefaceLib, the #defines exploit the fact that ``key'' and 
  412.   ``param'' routines can be used interchangeably, and makes sure that every 
  413.   invokation of a ``key'' API becomes an invokation of a ``param'' API.
  414. */
  415. #define AEPutKeyPtr(theAERecord, theAEKeyword, typeCode, dataPtr, dataSize) \
  416.     AEPutParamPtr((theAERecord), (theAEKeyword), (typeCode), (dataPtr), (dataSize))
  417. #define AEPutKeyDesc(theAERecord, theAEKeyword, theAEDesc) \
  418.     AEPutParamDesc((theAERecord), (theAEKeyword), (theAEDesc))
  419. #define AEGetKeyPtr(theAERecord, theAEKeyword, desiredType, typeCode, dataPtr, maxSize, actualSize) \
  420.     AEGetParamPtr((theAERecord), (theAEKeyword), (desiredType), (typeCode), (dataPtr), (maxSize), (actualSize))
  421. #define AEGetKeyDesc(theAERecord, theAEKeyword, desiredType, result) \
  422.     AEGetParamDesc((theAERecord), (theAEKeyword), (desiredType), (result))
  423. #define AESizeOfKeyDesc(theAERecord, theAEKeyword, typeCode, dataSize) \
  424.     AESizeOfParam((theAERecord), (theAEKeyword), (typeCode), (dataSize))
  425. #define AEDeleteKeyDesc(theAERecord, theAEKeyword) \
  426.     AEDeleteParam((theAERecord), (theAEKeyword))
  427. #endif
  428. /*
  429. *************************************************************************
  430.   The following calls create and manipulate the AppleEvent data type.
  431. *************************************************************************
  432. */
  433. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  434. extern pascal OSErr AECreateAppleEvent(AEEventClass theAEEventClass, AEEventID theAEEventID, const AEAddressDesc *target, AEReturnID returnID, AETransactionID transactionID, AppleEvent *result)
  435.  THREEWORDINLINE(0x303C, 0x0B14, 0xA816);
  436.  
  437. #endif
  438. #if FOR_SYSTEM8_PREEMPTIVE
  439. #if FOR_PTR_BASED_AE
  440. extern OSStatus AECustomCreateAppleEvent(AEEventClass theAEEventClass, AEEventID theAEEventID, const AEAddressDesc *target, AEReturnID returnID, AETransactionID transactionID, MemAllocatorRef allocator, AppleEvent *result);
  441.  
  442. extern OSStatus AECreateReplyAppleEvent(const AEAddressDesc *replyAddress, MemAllocatorRef allocator, AppleEvent *result);
  443.  
  444. #endif
  445. #endif
  446. /*
  447. *************************************************************************
  448.   The following calls are used to pack and unpack parameters from records
  449.   of type AppleEvent. Since AppleEvent is a subtype of AERecord, the calls
  450.   in the previous sections can also be used for variables of type
  451.   AppleEvent. The next six calls are in fact identical to the six calls
  452.   for AERecord.
  453. *************************************************************************
  454. */
  455. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  456. extern pascal OSErr AEPutParamPtr(AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType typeCode, const void *dataPtr, Size dataSize)
  457.  THREEWORDINLINE(0x303C, 0x0A0F, 0xA816);
  458.  
  459. extern pascal OSErr AEPutParamDesc(AppleEvent *theAppleEvent, AEKeyword theAEKeyword, const AEDesc *theAEDesc)
  460.  THREEWORDINLINE(0x303C, 0x0610, 0xA816);
  461.  
  462. extern pascal OSErr AEGetParamPtr(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType desiredType, DescType *typeCode, void *dataPtr, Size maximumSize, Size *actualSize)
  463.  THREEWORDINLINE(0x303C, 0x0E11, 0xA816);
  464.  
  465. extern pascal OSErr AEGetParamDesc(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType desiredType, AEDesc *result)
  466.  THREEWORDINLINE(0x303C, 0x0812, 0xA816);
  467.  
  468. extern pascal OSErr AESizeOfParam(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType *typeCode, Size *dataSize)
  469.  THREEWORDINLINE(0x303C, 0x0829, 0xA816);
  470.  
  471. extern pascal OSErr AEDeleteParam(AppleEvent *theAppleEvent, AEKeyword theAEKeyword)
  472.  THREEWORDINLINE(0x303C, 0x0413, 0xA816);
  473.  
  474. #endif
  475. /*
  476. *************************************************************************
  477.  The following calls also apply to type AppleEvent. Message attributes are
  478.  far more restricted, and can only be accessed through the following 5
  479.  calls. The various list and record routines cannot be used to access the
  480.  attributes of an event. 
  481. *************************************************************************
  482. */
  483. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  484. extern pascal OSErr AEGetAttributePtr(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType desiredType, DescType *typeCode, void *dataPtr, Size maximumSize, Size *actualSize)
  485.  THREEWORDINLINE(0x303C, 0x0E15, 0xA816);
  486.  
  487. extern pascal OSErr AEGetAttributeDesc(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType desiredType, AEDesc *result)
  488.  THREEWORDINLINE(0x303C, 0x0826, 0xA816);
  489.  
  490. extern pascal OSErr AESizeOfAttribute(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType *typeCode, Size *dataSize)
  491.  THREEWORDINLINE(0x303C, 0x0828, 0xA816);
  492.  
  493. extern pascal OSErr AEPutAttributePtr(AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType typeCode, const void *dataPtr, Size dataSize)
  494.  THREEWORDINLINE(0x303C, 0x0A16, 0xA816);
  495.  
  496. extern pascal OSErr AEPutAttributeDesc(AppleEvent *theAppleEvent, AEKeyword theAEKeyword, const AEDesc *theAEDesc)
  497.  THREEWORDINLINE(0x303C, 0x0627, 0xA816);
  498.  
  499. #endif
  500. #if FOR_SYSTEM8_PREEMPTIVE
  501. #if FOR_PTR_BASED_AE
  502. /*
  503. *************************************************************************
  504.   These calls are used to convert AEDescs into a "flattened", canonical 
  505.   form and back again.
  506. *************************************************************************
  507. */
  508. extern OSStatus AEConvertDescToAEDF(const AEDesc *descriptor, void *dataBuffer, ByteCount maximumSize, ByteCount *actualSize);
  509.  
  510. extern OSStatus AEConvertAEDFToDesc(const void *dataBuffer, ByteCount bufferSize, AEDesc *result);
  511.  
  512. extern OSStatus AEConvertAEDFToAppleEvent(AEEventClass eventClass, AEEventID eventID, const AEAddressDesc *target, AEReturnID returnID, AETransactionID transactionID, const void *dataBuffer, ByteCount bufferSize, MemAllocatorRef allocator, AppleEvent *result);
  513.  
  514. /*
  515. *************************************************************************
  516.   The following calls apply to AEStreams.  Once a AEStream has been 
  517.   fully written, it may be converted to an AEDesc, AEDescList or AERecord
  518.   to be used by the various other routines listed above.
  519. *************************************************************************
  520. */
  521. typedef struct OpaqueAEStream* AEStream;
  522. extern OSStatus AECreateStream(MemAllocatorRef allocator, AEStream *newStream);
  523.  
  524. extern OSStatus AECreateStreamToAppendDescList(const AEDescList *source, MemAllocatorRef allocator, AEStream *newStream);
  525.  
  526. extern OSStatus AEDisposeStream(AEStream deadStream);
  527.  
  528. extern OSStatus AEWriteStreamKey(AEStream stream, AEKeyword keyword);
  529.  
  530. extern OSStatus AEWriteStreamPtr(AEStream stream, void *dataPtr, ByteCount dataSize);
  531.  
  532. extern OSStatus AEWriteStreamDesc(AEStream stream, DescType dataType, void *dataPtr, ByteCount dataSize);
  533.  
  534. extern OSStatus AEWriteStreamAEDesc(AEStream stream, const AEDesc *desc);
  535.  
  536. extern OSStatus AEOpenStreamDesc(AEStream stream, DescType descriptorType);
  537.  
  538. extern OSStatus AEOpenStreamList(AEStream stream, void *factorData, ByteCount factorSize, Boolean isRecord);
  539.  
  540. extern OSStatus AECloseStreamDesc(AEStream stream);
  541.  
  542. extern OSStatus AEConvertStreamToDesc(AEStream stream, AEDesc *desc);
  543.  
  544. extern OSStatus AEConvertStreamToAEDF(AEStream stream, void *dataBuffer, ByteCount maximumSize, ByteCount *actualSize);
  545.  
  546. extern OSStatus AEConvertStreamToAppleEvent(AEEventClass eventClass, AEEventID eventID, const AEAddressDesc *target, AEReturnID returnID, AETransactionID transactionID, AEStream stream, MemAllocatorRef allocator, AppleEvent *result);
  547.  
  548. /*
  549. *************************************************************************
  550.   The following calls apply to AESubDescs.  AESubDescs provide an efficient
  551.   way to traverse recursive AERecords and AEDescLists.
  552. *************************************************************************
  553. */
  554. struct OpaqueAESubDesc {
  555.     UInt32                             reserved[8];
  556. };
  557. typedef struct OpaqueAESubDesc OpaqueAESubDesc;
  558.  
  559. typedef OpaqueAESubDesc AESubDesc;
  560. extern OSStatus AEConvertDescToSubDesc(const AEDesc *desc, AESubDesc *newSubDesc);
  561.  
  562. extern OSStatus AEConvertSubDescToDesc(const AESubDesc *subDesc, DescType desiredType, AEDesc *desc);
  563.  
  564. extern OSStatus AEConvertAppleEventAttributesToSubDesc(const AppleEvent *event, AESubDesc *subDesc);
  565.  
  566. extern DescType AEGetSubDescType(const AESubDesc *subDesc);
  567.  
  568. extern DescType AEGetSubDescBasicType(const AESubDesc *subDesc);
  569.  
  570. extern Boolean AESubDescIsListOrRecord(const AESubDesc *subDesc);
  571.  
  572. extern OSStatus AEGetSubDescData(const AESubDesc *subDesc, void *dataPtr, ByteCount bufferSize, ByteCount *actualSize);
  573.  
  574. extern OSStatus AESetSubDescData(const AESubDesc *subDesc, void *dataPtr, ByteCount sizePtr);
  575.  
  576. extern OSStatus AEGetSubDescFactorData(const AESubDesc *subDesc, void *factorData, ByteCount bufferSize, ByteCount *actualSize);
  577.  
  578. extern OSStatus AECountSubDescItems(const AESubDesc *subDesc, ItemCount *items);
  579.  
  580. extern OSStatus AEGetNthSubDesc(const AESubDesc *subDesc, ItemCount item, AEKeyword *keyword, AESubDesc *newSubDesc);
  581.  
  582. extern OSStatus AEGetKeySubDesc(const AESubDesc *subDesc, AEKeyword keyword, AESubDesc *newSubDesc);
  583.  
  584. #endif
  585. #endif
  586.  
  587. #if PRAGMA_ALIGN_SUPPORTED
  588. #pragma options align=reset
  589. #endif
  590.  
  591. #if PRAGMA_IMPORT_SUPPORTED
  592. #pragma import off
  593. #endif
  594.  
  595. #ifdef __cplusplus
  596. }
  597. #endif
  598.  
  599. #endif /* __AEDATAMODEL__ */
  600.  
  601.